import { getUserInfo, login, getUserDetailById } from '@/api/user'
import { resetRouter } from '@/router'
// import { Message } from 'element-ui'
import { getToken, setToken, removeToken, setTimeStamp } from '@/utils/auth'

const state = {
  // 获取token
  token: getToken(),
  userInfo: {}
}
const mutations = {
  // 修改token
  setToken(state, data) {
    state.token = data
    // 数据持久化
    setToken(data)
  },
  // 删除token
  removeToken(state) {
    state.token = ''
    removeToken()
  },
  // 设置用户数据
  setUserInfo(state, data) {
    // 为了避免数据的污染，最后拷贝一份新对象
    state.userInfo = { ...data }
    // console.log(state.userInfo)
  },
  // 删除用户数据
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {
  // 登录请求
  async login(store, data) {
    const res = await login(data)
    console.log(res)
    // if (res.data.success) {
    //   setToken(res.data.data)
    // } else {
    //   Message.error(res.data.message)
    // }
    store.commit('setToken', res)
    // login(data).then(res => {
    //   // console.log(res)
    //   store.commit('setToken', res.data.data)
    //   // console.log(state.token)
    // })
    // 登录成功后记录时间戳
    setTimeStamp()
  },
  // 获取基本用户信息请求
  async getUserInfo(store) {
    const res = await getUserInfo()
    // console.log(res)
    // 这里获取的数据不够，少了头像
    // 就要从这里获取用户的详情
    const userDetail = await getUserDetailById(res.userId)
    // console.log(userDetail)
    const data = {
      ...res,
      ...userDetail
    }
    store.commit('setUserInfo', data)
  },
  // 清除token和用户信息
  logout(store) {
    store.commit('removeToken')
    store.commit('removeUserInfo')
    // 清理路由配置
    resetRouter()
    // 清理菜单
    // 默认带模块路径的语法，是调用子模块 mutations 的方式
    // 但是 permission 跟 user 是兄弟模块
    // 如果要以子模块的方式触发，只能是上一层的根模块才可以
    // 这里的调用可以加上第三个参数，是一个配置对象
    // 里面用一个 root 属性，可以指定当前的调用基于跟模块
    store.commit('permission/serRoutes', [], { root: true })
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
